<?php
/*
 * 组合策略
 * 将一组对象组合成为可像单个对象一样被使用 的结构。
 * Adair 2021-10-09
 * CostStrategy 对象独立负责计算费用
 * Lesson 对象则负责管理课程数据。
 * 有课程"演讲"和"研讨会"两种，付费方式有"按小时付费"和"固定收费"2种
 * 付费方式扩充：特殊供应/海外学生费用/介绍提供折扣等等
*/
function my_autoloader($class) {
    //var_dump($class);
    include $class . '.php';
}
spl_autoload_register('my_autoloader');


$lessons[] = new Seminar(4,new TimedCostStrategy());
$lessons[] = new Lecture(4,new FixedCostStrategy());

foreach($lessons as $lesson){
    print "lesson charge {$lesson->cost()}.\n<BR/>";
    print "Charge type: {$lesson->chargeType()}.\n<BR/>";
}